﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace thinger.MTHControlLib
{
    [DefaultEvent("DoubleClick")]
    public partial class TextSet : UserControl
    {
        public TextSet()
        {
            InitializeComponent();


            //设置组件的样式 解决闪烁的问题，和背景问题
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);//此设置确保控件的所有绘制都通过 WM_PAINT 消息处理。这有助于避免绘制不一致和闪烁问题，
            this.SetStyle(ControlStyles.DoubleBuffer, true);//双缓冲是一种减少或消除闪烁的技术，它通过在内存中绘制控件的副本，然后再一次性将其绘制到屏幕上，从而提高了绘制的平滑性。
            this.SetStyle(ControlStyles.ResizeRedraw, true);//当控件大小改变时，此设置确保控件会重绘其内容。这有助于避免在调整控件大小时出现绘制问题，如未更新的区域或闪烁。
            this.SetStyle(ControlStyles.Selectable, true);//此设置使控件可选择。对于某些控件（如自定义控件），可能需要明确设置此标志以启用选择功能。
            this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); //此设置允许控件支持透明背景色。当控件的背景色设置为 Color.Transparent 时，它将显示其父容器的背景。
        }

        private string title = "1#站点温度高限";
        [Browsable(true)]
        [Category("自定义属性")]
        [Description("设置名称")]
        public string Title
        {
            get { return title; }
            set
            {
                title = value;
                this.lblTitle.Text = title;
                this.Invalidate();
            }
        }
        private string bindVarName = "模块1温度高限";
        [Browsable(true)]
        [Category("自定义属性")]
        [Description("设置绑定的变量的名称")]
        public string BindVarName
        {
            get { return bindVarName; }
            set
            {
                bindVarName = value;
                this.Invalidate();
            }
        }

        //bindVarName和currentValue是一对
        private float currentValue = 0.0f;
        [Browsable(true)]
        [Category("自定义属性")]
        [Description("设置限定值")]
        public float CurrentValue
        {
            get { return currentValue; }
            set
            {
                if (currentValue != value)
                {
                    currentValue = value;
                    this.lblValue.Text = currentValue.ToString();
                    this.Invalidate();
                }

            }
        }


        private string alarmVarName = "模块1异常";
        [Browsable(true)]
        [Category("自定义属性")]
        [Description("警告的变量名字")]
        public string AlarmVarName
        {
            get { return alarmVarName; }
            set
            {
                alarmVarName = value;
                this.Invalidate();
            }
        }
        //alarmVarName和isAlarm是一对
        private bool isAlarm = false;
        [Browsable(true)]
        [Category("自定义属性")]
        [Description("警告的变量名字")]
        public bool IsAlarm
        {
            get { return isAlarm; }
            set
            {
                if (isAlarm != value)
                {
                    isAlarm = value;
                    this.ledAlarm.Value = isAlarm;
                    this.Invalidate();
                }

            }
        }

        private string unit = "℃";
        [Browsable(true)]
        [Category("自定义属性")]
        [Description("单位")]
        public string Unit
        {
            get { return unit; }
            set
            {
                unit = value;
                this.lblUnit.Text = unit;
                this.Invalidate();
            }
        }

        private new EventHandler DoubleClick;
        /// <summary>
        /// 绑定事件，给label绑定整个Click
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        [Browsable(true)] //是否显示
        [Category("自定义事件")] //定义属性
        [Description("导航的点击事件")] // 描述
        private void lblValue_Click(object sender, EventArgs e)
        {
            this.DoubleClick?.Invoke(this, e);
        }
    }
}
